﻿using PhraseCorrector.Common;
using PhraseCorrector.SpellCore;
using System.Collections.Generic;
using System.Linq;

namespace PhraseCorrector.WordLineSplit {
    internal class ChineseSimilary
    {

        #region 成员变量

        ////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// 中文识别结果，专门用于存储和处理中文的识别数据
        /// </summary>
        private PhraseResult ChineseResult { set; get; } = new PhraseResult();

        #endregion

        #region 调用入口

        ////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// 计算给定对象与当前实例在中文、英文和拼音上的相似度。
        /// </summary>
        /// <param name="obj">待比较的对象。</param>
        /// <returns>包含中文、英文和拼音相似度的元组。</returns>
        private double ChineseSmilary_Values(PhraseResult obj) {
            return string.IsNullOrEmpty(ChineseResult.Chinese) ? 0 : SpellCoefficient.Similarity(ChineseResult.Chinese, obj.Chinese);
        }

        ////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// 初始化ChineseSimilary类，用于后续的相似度比较。
        /// </summary>
        /// <param name="chineseResult">中文结果对象。</param>
        /// <param name="englishResult">英文结果对象。</param>
        /// <param name="pinyinResult">拼音结果对象。</param>
        public ChineseSimilary(PhraseResult chineseResult, PhraseResult englishResult, PhraseResult pinyinResult)
        {
            ChineseResult = chineseResult;
        }

        ////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// 设置最相似的结果到给定对象中。
        /// </summary>
        /// <param name="obj">待比较的对象。</param>
        public void SetBetter(PhraseResult obj) {
            if (ChineseSmilary_Values(obj) > 0)
                // 当索引为0且相似度大于0.3时，返回预设的中文结果；否则，返回ECResult对象中的中文结果。
                obj.Chinese = ChineseResult.Chinese;
        }

        #endregion
    }
}
